package cn.bonoon.services;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.bonoon.core.plugins.GroupService;
import cn.bonoon.entities.GroupEntity;
import cn.bonoon.kernel.support.services.AbstractService;

@Service
@Transactional(readOnly = true)
public class GroupServiceImpl extends AbstractService<GroupEntity> implements GroupService{
//
//	private List<GroupEntity> internalGroups(){
//		String ql = "select x from GroupEntity x where x.deleted=false and x.status=1";
//		return __list(GroupEntity.class, ql);
//	}
//
//	@Override
//	public List<ObjectItem> groups(AccountEntity account) {
//		String ql = "select x.group.id from GroupAccountEntity x where x.invalid=false and x.account.id=?";
//		return ObjectCollection.valueOf(internalGroups(), __list(Long.class, ql, account.getId()));
//	}
//	
//	@Override
//	public List<ObjectItem> groups(RoleEntity role) {
//		String ql = "select x.group.id from GroupRoleEntity x where x.invalid=false and x.role.id=?";
//		return ObjectCollection.valueOf(internalGroups(), __list(Long.class, ql, role.getId()));
//	}
//	
//	@Override
//	public void saveRoleGroups(IOperator user, Long id, Long... ids) {
//		String ql = "select x from GroupRoleEntity x where x.role.id=?";
//		List<GroupRoleEntity> oldGroups = __list(GroupRoleEntity.class, ql, id);
//		List<Long> sids = Arrays.asList(ids);
//
//		for(GroupRoleEntity oldGroup : oldGroups){
//			oldGroup.setInvalid(!sids.remove(oldGroup.getId()));
//			entityManager.merge(oldGroup);
//		}
//
//		if(!sids.isEmpty()){
//			Date now = new Date();
//			RoleEntity role = entityManager.find(RoleEntity.class, id);
//			for(Long gid : sids){
//				GroupRoleEntity newGroup = new GroupRoleEntity();
//				newGroup.setRole(role);
//				newGroup.setCreateAt(now);
//				newGroup.setCreatorId(user.getId());
//				newGroup.setGroup(__get(gid));
//				entityManager.persist(newGroup);
//			}
//		}
//	}
//	
//	@Override
//	@Transactional
//	public void saveAccountGroups(IOperator user, Long id, Long... ids) {
//		String ql = "select x from GroupAccountEntity x where x.account.id=?";
//		List<GroupAccountEntity> oldGroups = __list(GroupAccountEntity.class, ql, id);
//		List<Long> sids = Arrays.asList(ids);
//		
//		for(GroupAccountEntity oldGroup : oldGroups){
//			oldGroup.setInvalid(!sids.remove(oldGroup.getId()));
//			entityManager.merge(oldGroup);
//		}
//		
//		if(!sids.isEmpty()){
//			Date now = new Date();
//			AccountEntity account = entityManager.find(AccountEntity.class, id);
//			for(Long gid : sids){
//				GroupAccountEntity newGroup = new GroupAccountEntity();
//				newGroup.setAccount(account);
//				newGroup.setCreateAt(now);
//				newGroup.setCreatorId(user.getId());
//				newGroup.setGroup(__get(gid));
//				entityManager.persist(newGroup);
//			}
//		}
//	}

}
